//--------------------------------------------------
// Todo報告ダイアログ
//--------------------------------------------------

App.ProjectDlgReport = function(config){
  // スーパークラスコンストラクタ呼び出し
  App.ProjectDlgReport.superclass.constructor.call(this, config);
} ;

// App.ModalDialogを継承
Ext.extend(App.ProjectDlgReport, App.ModalDialog, {
  container :"dlg_tsk_report",       // コンテナエレメントのID（オーバーライド）
  width : 450,                       // ダイアログの幅（オーバーライド）
  height : 'auto',                   // ダイアログの高さ（オーバーライド）
  task_id : null,
  progress_rate : null,

  /*==================================================
   * 関数名：onDocLoaded
   * 概　要：ドキュメントロードイベントハンドラ
   * 引　数：なし
   * 戻り値：なし
   ==================================================*/
  onDocLoaded : function(eventObject, target){
    //-----------------------------
    // スーパークラスの処理を実行
    //-----------------------------
    App.ProjectDlgReport.superclass.onDocLoaded.call(this, eventObject, target);
  },

  /*==================================================
   * 関数名：fncCreateDialog
   * 概　要：コンテナエレメントに対して、ダイアログオブジェクトを生成する
   *     ：（初期表示時に呼び出される）
   * 引　数：なし
   * 戻り値：なし
   ==================================================*/
  fncCreateDialog : function(){
    //-----------------------------
    // スーパークラスの処理を実行
    //-----------------------------
    App.ProjectDlgReport.superclass.fncCreateDialog.call(this);

    // ページレンダリング
    this.fncRender() ;
    // 各イベント設定
    this.fncSetEvent() ;

  },

  /*==================================================
   * 関数名：fncRender
   * 概　要：ページをレンダリングする
   * 引　数：なし
   * 戻り値：なし
   ==================================================*/
  fncRender : function(){
  },

  /*==================================================
   * 関数名：fncSetEvent
   * 概　要：当該ページのイベントハンドラを設定する
   * 引　数：なし
   * 戻り値：なし
   ==================================================*/
  fncSetEvent : function(){
    // 保存ボタンクリックイベント設定
    var elm = Ext.get('dlg_tsk_report_save') ;
    elm.on('click', this.onSave, this, true) ;

    // 閉じるボタンクリックイベント設定
    var elm = Ext.get('dlg_tsk_report_close') ;
    elm.on('click', this.onClose, this, true) ;

    // 完了チェックボックスイベント設定
    elm = Ext.get("dlg_tsk_report_task_progress_kbn") ;
    elm.on('click', this.onProgressKbnClick, this, true) ;

    // 進捗率イベント設定
    var cmp = Ext.getCmp('dlg_tsk_report_task_progress_rate') ;
    cmp.addListener("blur", this.onProgressRateChange, this, true) ;

  },

  /*==================================================
   * 関数名：fncReset
   * 概　要：ダイアログ内容をリセットする（初期表示時、再表示時に呼び出される）
   * 引　数：なし
   * 戻り値：なし
   ==================================================*/
  fncReset: function(){
      // ダイアログに入力されている値のクリア
      var elm = Ext.get('dlg_tsk_report_form') ;
      elm.dom.reset() ;

  },

  /*==================================================
   * 関数名：onBeforeShow
   * 概　要：ダイアログ表示前イベントハンドラ。
   *     ：必要なデータをロードする。
   * 引　数：dlg           Ext.BasicDialog  ダイアログオブジェクト
   * 戻り値：なし
   ==================================================*/
  onBeforeShow : function( dlg ){
    //ダイアログセットする
    this.fncDataSet() ;
  },

  /*==================================================
   * 関数名：fncDataSet
   * 概　要：入力フォームデータをセットする
   * 戻り値：なし
   ==================================================*/
  fncDataSet : function(){
    if( !this.task_id ) return false ;
    //データＩＤ
    var elm = Ext.get('dlg_tsk_report_task_id');
    elm.dom.value = this.task_id;
  },

  /*==================================================
   * 関数名：onSave
   * 概　要：保存ボタンクリックイベント。
   *     フォームの内容をAjax経由で登録要求する。
   * 引　数：なし
   * 戻り値：なし
   ==================================================*/
  onSave : function(){

    // 入力チェック
    var ret = this.inputCheck();
    if (!ret) {
      return false;
    }

    // 確認メッセージ表示
    var ret = confirm( app_localized_message("confirm", "save_confirm") ) ;
    if( !ret ) return false ;

    // 非同期リクエスト
    var options =
    {
      url: url_for('/task/dlg_report_update'),
      form: 'dlg_tsk_report_form',
      success: this.onfncSaveSuccess ,
      failure: this.onfncSaveFail,
      scope: this,
      method :'POST'
    } ;
    Ext.Ajax.request(options) ;

  },

  /*==================================================
   * 関数名：onfncSaveSuccess
   * 概　要：登録処理成功時コールバック
   * 引　数：response        Object       レスポンスオブジェクト
   *     ：options         Object       リクエストパラメータオプション
   * 戻り値：なし
   ==================================================*/
  onfncSaveSuccess : function(response, options){
    var responseobj = Ext.util.JSON.decode(response.responseText) ;

    var success = responseobj.success ;
    var message = responseobj.message ;
    if( success ){
      //進捗率を取得
      var cmp = Ext.getCmp('dlg_tsk_report_task_progress_rate');
      this.progress_rate = cmp.getValue();

      this.dialog.hide() ;
      this.fncExecCallback("on_save") ;
    }
    else{
      alert(message);
    }

  },

  /*==================================================
   * 関数名：onSaveFail
   * 概　要：登録処理失敗時コールバック
   * 引　数：response        Object       レスポンスオブジェクト
   *     ：options         Object       リクエストパラメータオプション
   * 戻り値：なし
   ==================================================*/
  onfncSaveFail : function(response, options) {
    var responseobj = Ext.util.JSON.decode(response.responseText) ;
    var message = responseobj.message ;
    alert(message);
  },


  onClose : function(){
    this.dialog.hide() ;
    this.fncExecCallback("on_close") ;
  },


  onProgressKbnClick : function(){
    var elm_kbn = Ext.get("dlg_tsk_report_task_progress_kbn") ;
    var cmp_rate = Ext.getCmp("dlg_tsk_report_task_progress_rate") ;
    if(elm_kbn.dom.checked){
      cmp_rate.setValue('10');
    }
    else{
      if( cmp_rate.getValue() == '10' ){
        cmp_rate.setValue('0');
      }
    }
  },


  onProgressRateChange : function(){
    var elm_kbn = Ext.get("dlg_tsk_report_task_progress_kbn") ;
    var cmp_rate = Ext.getCmp("dlg_tsk_report_task_progress_rate") ;
    if(cmp_rate.getValue() == '10' ){
      elm_kbn.dom.checked = true ;
    }
    else{
      elm_kbn.dom.checked = false ;
    }
  },


  /*==================================================
   * 関数名：inputCheck
   * 概　要：値をチェックする
   * 戻り値：true
   ==================================================*/
  inputCheck : function(){
    // 報告日
    var report_date = Ext.get('dlg_tsk_report_task_report_date').dom.value ;
    if (report_date == '') {
      alert('報告日は必須入力です。');
      return false;
    }

    // 日付書式チェック
    var report_date_valid = this.fncValidDate(report_date);
    if (!report_date_valid) {
      alert('報告日が正しくありません。');
      return false;
    }

    // 進捗率
    var progress_rate = Ext.get('dlg_tsk_report_task_progress_rate').dom.value ;
    if (progress_rate == '') {
      alert('進捗率は必須入力です。');
      return false;
    }
    return true;
  }

});
//=============================
// 現在のページオブジェクトのdialogsメンバーに設定
//=============================
App.Page.thispage.dialogs.ProjectDlgReport = new App.ProjectDlgReport() ;